/*
 * Copyright (C) 2023 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @addtogroup OH_Camera
 * @{
 *
 * @brief 为相机模块提供C接口的定义。
 *
 * @syscap SystemCapability.Multimedia.Camera.Core
 *
 * @since 11
 * @version 1.0
 */

/**
 * @file capture_session.h
 *
 * @brief 声明捕获会话概念。
 *
 * @library libohcamera.so
 * @kit CameraKit
 * @include <ohcamera/capture_session.h>
 * @syscap SystemCapability.Multimedia.Camera.Core
 * @since 11
 * @version 1.0
 */

#ifndef NATIVE_INCLUDE_CAMERA_CAMERA_SESSION_H
#define NATIVE_INCLUDE_CAMERA_CAMERA_SESSION_H

#include <stdint.h>
#include <stdio.h>
#include "camera.h"
#include "camera_input.h"
#include "preview_output.h"
#include "photo_output.h"
#include "video_output.h"
#include "metadata_output.h"
#include "native_buffer/native_buffer.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief 捕获会话对象。\n
 *
 * 可以使用{@link OH_CameraManager_CreateCaptureSession}方法创建指针。
 *
 * @since 11
 * @version 1.0
 */
typedef struct Camera_CaptureSession Camera_CaptureSession;

/**
 * @brief 在{@link CaptureSession_Callbacks}中被调用的捕获会话焦点状态回调。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param focusState 回调传递的会话焦点状态。
 * @since 11
 */
typedef void (*OH_CaptureSession_OnFocusStateChange)(Camera_CaptureSession* session, Camera_FocusState focusState);

/**
 * @brief 在{@link CaptureSession_Callbacks}中被调用的捕获会话错误回调。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param errorCode 捕获会话的错误码。
 *
 * @see CAMERA_SERVICE_FATAL_ERROR
 * @since 11
 */
typedef void (*OH_CaptureSession_OnError)(Camera_CaptureSession* session, Camera_ErrorCode errorCode);

/**
 * @brief 拍照会话平滑变焦信息回调，触发平滑变焦后该回调会返回。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param smoothZoomInfo 回调传递的平滑变焦参数信息。
 * @since 12
 */
typedef void (*OH_CaptureSession_OnSmoothZoomInfo)(Camera_CaptureSession* session,
    Camera_SmoothZoomInfo* smoothZoomInfo);

/**
 * @brief 捕获会话设备切换状态回调。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param autoDeviceSwitchStatusInfo 回调传递的设备切换状态信息。
 * @since 13
 */
typedef void (*OH_CaptureSession_OnAutoDeviceSwitchStatusChange)(Camera_CaptureSession* session,
    Camera_AutoDeviceSwitchStatusInfo* autoDeviceSwitchStatusInfo);

/**
 * @brief 捕获系统压力状态变化回调。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param systemPressureLevel 回调传递的系统压力等级。
 * @since 20
 */
typedef void (*OH_CaptureSession_OnSystemPressureLevelChange)(Camera_CaptureSession* session,
    Camera_SystemPressureLevel systemPressureLevel);

/**
 * @brief 相机控制器效果激活状态变化回调。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param controlCenterStatusInfo 回调传递的相机控制器效果激活状态。
 * @since 20
 */
typedef void (*OH_CaptureSession_OnControlCenterEffectStatusChange)(Camera_CaptureSession* session,
    Camera_ControlCenterStatusInfo* controlCenterStatusInfo);

/**
 * @brief 捕获会话的回调。
 *
 * @see OH_CaptureSession_RegisterCallback
 * @since 11
 * @version 1.0
 */
typedef struct CaptureSession_Callbacks {
    /**
     * 捕获会话焦点状态更改事件。
     */
    OH_CaptureSession_OnFocusStateChange onFocusStateChange;

    /**
     * 捕获会话错误事件。
     */
    OH_CaptureSession_OnError onError;
} CaptureSession_Callbacks;

/**
 * @brief 注册捕获会话事件回调。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param callback 要注册的捕获会话事件回调。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_RegisterCallback(Camera_CaptureSession* session,
    CaptureSession_Callbacks* callback);

/**
 * @brief 注销捕获会话事件回调。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param callback 要注销的捕获会话事件回调。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_UnregisterCallback(Camera_CaptureSession* session,
    CaptureSession_Callbacks* callback);

/**
 * @brief 注册平滑变焦信息事件回调。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param smoothZoomInfoCallback 要注册的平滑变焦信息事件回调。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_RegisterSmoothZoomInfoCallback(Camera_CaptureSession* session,
    OH_CaptureSession_OnSmoothZoomInfo smoothZoomInfoCallback);

/**
 * @brief 注销平滑变焦信息事件回调。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param smoothZoomInfoCallback 要注销的平滑变焦信息事件回调。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_UnregisterSmoothZoomInfoCallback(Camera_CaptureSession* session,
    OH_CaptureSession_OnSmoothZoomInfo smoothZoomInfoCallback);

/**
 * @brief 设置会话模式。\n
 *
 * 此接口不能在{@link OH_CaptureSession_BeginConfig}之后使用。\n
 * 建议在使用{@link OH_CameraManager_CreateCaptureSession}后立即使用此接口。
 * 
 * @param session Camera_CaptureSession实例。
 * @param sceneMode 相机模式。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：操作不允许。\n
 *         CAMERA_SESSION_CONFIG_LOCKED：会话配置已锁定。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_SetSessionMode(Camera_CaptureSession* session, Camera_SceneMode sceneMode);
 
/**
 * @brief 把其中一条PreviewOutput标记成安全输出。
 *
 * @param session Camera_CaptureSession实例。
 * @param previewOutput 要标记为安全输出的Camera_PreviewOutput。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：操作不允许。\n
 *         CAMERA_SESSION_CONFIG_LOCKED：会话配置已锁定。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_AddSecureOutput(Camera_CaptureSession* session, Camera_PreviewOutput* previewOutput);

/**
 * @brief 开始捕获会话配置。
 *
 * @param session Camera_CaptureSession实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_CONFIG_LOCKED：会话配置已锁定。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_BeginConfig(Camera_CaptureSession* session);

/**
 * @brief 提交捕获会话配置。
 *
 * @param session Camera_CaptureSession实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：操作不允许。\n
 *         CAMERA_SERVICE_FATAL_ERROR：相机服务出现致命错误。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_CommitConfig(Camera_CaptureSession* session);

/**
 * @brief 添加相机输入。
 *
 * @param session Camera_CaptureSession实例。
 * @param cameraInput 要添加的相机输入实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：操作不允许。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_AddInput(Camera_CaptureSession* session, Camera_Input* cameraInput);

/**
 * @brief 删除相机输入。
 *
 * @param session Camera_CaptureSession实例。
 * @param cameraInput 要删除的相机输入实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：操作不允许。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_RemoveInput(Camera_CaptureSession* session, Camera_Input* cameraInput);

/**
 * @brief 添加预览输出。
 *
 * @param session Camera_CaptureSession实例。
 * @param previewOutput 要添加的预览输出实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：操作不允许。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_AddPreviewOutput(Camera_CaptureSession* session,
    Camera_PreviewOutput* previewOutput);

/**
 * @brief 删除预览输出。
 *
 * @param session Camera_CaptureSession实例。
 * @param previewOutput 要删除的预览输出实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：操作不允许。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_RemovePreviewOutput(Camera_CaptureSession* session,
    Camera_PreviewOutput* previewOutput);

/**
 * @brief 添加拍照输出。
 *
 * @param session Camera_CaptureSession实例。
 * @param photoOutput 要添加的拍照输出实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：操作不允许。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_AddPhotoOutput(Camera_CaptureSession* session, Camera_PhotoOutput* photoOutput);

/**
 * @brief 删除拍照输出。
 *
 * @param session Camera_CaptureSession实例。
 * @param photoOutput 要删除的拍照输出实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：操作不允许。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_RemovePhotoOutput(Camera_CaptureSession* session, Camera_PhotoOutput* photoOutput);

/**
 * @brief 添加录像输出。
 *
 * @param session Camera_CaptureSession实例。
 * @param videoOutput 要添加的录像输出实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：操作不允许。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_AddVideoOutput(Camera_CaptureSession* session, Camera_VideoOutput* videoOutput);

/**
 * @brief 删除录像输出。
 *
 * @param session Camera_CaptureSession实例。
 * @param videoOutput 要删除的录像输出实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：操作不允许。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_RemoveVideoOutput(Camera_CaptureSession* session, Camera_VideoOutput* videoOutput);

/**
 * @brief 添加元数据输出。
 *
 * @param session Camera_CaptureSession实例。
 * @param metadataOutput 要添加的元数据输出实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：操作不允许。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_AddMetadataOutput(Camera_CaptureSession* session,
    Camera_MetadataOutput* metadataOutput);

/**
 * @brief 删除元数据输出。
 *
 * @param session Camera_CaptureSession实例。
 * @param metadataOutput 要删除的元数据输出实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：操作不允许。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_RemoveMetadataOutput(Camera_CaptureSession* session,
    Camera_MetadataOutput* metadataOutput);

/**
 * @brief 启动捕获会话。
 *
 * @param session 要启动的Camera_CaptureSession实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。\n
 *         CAMERA_SERVICE_FATAL_ERROR：相机服务出现致命错误。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_Start(Camera_CaptureSession* session);

/**
 * @brief 停止捕获会话。
 *
 * @param session 要停止的Camera_CaptureSession实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SERVICE_FATAL_ERROR：相机服务出现致命错误。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_Stop(Camera_CaptureSession* session);

/**
 * @brief 释放捕获会话。
 *
 * @param session 要释放的Camera_CaptureSession实例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SERVICE_FATAL_ERROR：相机服务出现致命错误。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_Release(Camera_CaptureSession* session);

/**
 * @brief 检查设备是否有闪光灯。
 *
 * @param session Camera_CaptureSession实例。
 * @param hasFlash 是否支持闪光灯的结果。返回true表示支持闪光灯，返回false表示不支持。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_HasFlash(Camera_CaptureSession* session, bool* hasFlash);

/**
 * @brief 检查是否支持指定的闪光灯模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param flashMode 要检查的闪光灯模式。
 * @param isSupported 是否支持闪光灯模式的结果。返回true表示支持闪光灯模式，返回false表示不支持。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_IsFlashModeSupported(Camera_CaptureSession* session,
    Camera_FlashMode flashMode, bool* isSupported);

/**
 * @brief 获取当前闪光灯模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param flashMode 当前闪光灯模式。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_GetFlashMode(Camera_CaptureSession* session, Camera_FlashMode* flashMode);

/**
 * @brief 设置闪光灯模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param flashMode 要设置的闪光灯模式。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_SetFlashMode(Camera_CaptureSession* session, Camera_FlashMode flashMode);

/**
 * @brief 检查是否支持指定的曝光模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param exposureMode 要检查的曝光模式。
 * @param isSupported 是否支持曝光模式的结果。返回true表示支持曝光模式，返回false表示不支持。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_IsExposureModeSupported(Camera_CaptureSession* session,
    Camera_ExposureMode exposureMode, bool* isSupported);

/**
 * @brief 获取当前曝光模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param exposureMode 当前的曝光模式。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_GetExposureMode(Camera_CaptureSession* session, Camera_ExposureMode* exposureMode);

/**
 * @brief 设置曝光模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param exposureMode 要设置的曝光模式。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_SetExposureMode(Camera_CaptureSession* session, Camera_ExposureMode exposureMode);

/**
 * @brief 获取当前测量点。
 *
 * @param session Camera_CaptureSession实例。
 * @param point 当前测量点。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_GetMeteringPoint(Camera_CaptureSession* session, Camera_Point* point);

/**
 * @brief 设置计量区域的中心点。
 *
 * @param session Camera_CaptureSession实例。
 * @param point 要设置的测量点。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_SetMeteringPoint(Camera_CaptureSession* session, Camera_Point point);

/**
 * @brief 查询曝光补偿范围。
 *
 * @param session Camera_CaptureSession实例。
 * @param minExposureBias 曝光补偿的最小值。
 * @param maxExposureBias 曝光补偿的最大值。
 * @param step 每个级别之间的曝光补偿阶梯。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_GetExposureBiasRange(Camera_CaptureSession* session, float* minExposureBias,
    float* maxExposureBias, float* step);

/**
 * @brief 设置曝光补偿。
 *
 * @param session Camera_CaptureSession实例。
 * @param exposureBias 要设置的曝光补偿。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_SetExposureBias(Camera_CaptureSession* session, float exposureBias);

/**
 * @brief 获取当前曝光补偿。
 *
 * @param session Camera_CaptureSession实例。
 * @param exposureBias 当前的曝光补偿。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_GetExposureBias(Camera_CaptureSession* session, float* exposureBias);

/**
 * @brief 检查是否支持指定的聚焦模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param focusMode 要检查的聚焦模式。
 * @param isSupported 是否支持聚焦模式的结果。返回true表示支持聚焦模式，返回false表示不支持。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_IsFocusModeSupported(Camera_CaptureSession* session,
    Camera_FocusMode focusMode, bool* isSupported);

/**
 * @brief 获取当前聚焦模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param focusMode 当前聚焦模式。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_GetFocusMode(Camera_CaptureSession* session, Camera_FocusMode* focusMode);

/**
 * @brief 设置聚焦模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param focusMode 要设置的聚焦模式。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_SetFocusMode(Camera_CaptureSession* session, Camera_FocusMode focusMode);

/**
 * @brief 获取当前焦点。
 *
 * @param session Camera_CaptureSession实例。
 * @param focusPoint 当前焦点。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_GetFocusPoint(Camera_CaptureSession* session, Camera_Point* focusPoint);

/**
 * @brief 设置焦点。
 *
 * @param session Camera_CaptureSession实例。
 * @param focusPoint 要设置的目标点。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_SetFocusPoint(Camera_CaptureSession* session, Camera_Point focusPoint);

/**
 * @brief 获取所有支持的缩放比例范围。
 *
 * @param session Camera_CaptureSession实例。
 * @param minZoom 缩放比范围的最小值。
 * @param maxZoom 缩放比例范围的最大值。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_GetZoomRatioRange(Camera_CaptureSession* session, float* minZoom, float* maxZoom);

/**
 * @brief 获取当前缩放比例。
 *
 * @param session Camera_CaptureSession实例。
 * @param zoom 当前缩放比例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_GetZoomRatio(Camera_CaptureSession* session, float* zoom);

/**
 * @brief 设置缩放比例。
 *
 * @param session Camera_CaptureSession实例。
 * @param zoom 要设置的目标缩放比。\n
 * 设置可变焦距比到底层生效需要一定时间，获取正确设置的可变焦距比需要等待1~2帧的时间。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_SetZoomRatio(Camera_CaptureSession* session, float zoom);

/**
 * @brief 检查是否支持指定的录像防抖模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param mode 要检查的录像防抖模式。
 * @param isSupported 是否支持录像防抖模式的结果。返回true表示支持录像防抖模式，返回false表示不支持。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_IsVideoStabilizationModeSupported(Camera_CaptureSession* session,
    Camera_VideoStabilizationMode mode, bool* isSupported);

/**
 * @brief 获取当前录像防抖模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param mode 当前录像防抖模式。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_GetVideoStabilizationMode(Camera_CaptureSession* session,
    Camera_VideoStabilizationMode* mode);

/**
 * @brief 设置录像防抖模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param mode 要设置的录像防抖模式。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 11
 */
Camera_ErrorCode OH_CaptureSession_SetVideoStabilizationMode(Camera_CaptureSession* session,
    Camera_VideoStabilizationMode mode);

/**
 * @brief 确定是否可以将相机输入添加到会话中。
 *
 * @param session Camera_CaptureSession实例。
 * @param cameraInput 要设置的相机输入实例。
 * @param isSuccessful 是否可以将相机输入添加到会话中的结果。返回true表示可以将相机输入添加到会话中，返回false表示不可以。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_CanAddInput(Camera_CaptureSession* session,
    Camera_Input* cameraInput, bool* isSuccessful);

/**
 * @brief 确定是否可以将相机预览输出添加到会话中。
 *
 * @param session Camera_CaptureSession实例。
 * @param cameraOutput 要设置的预览输出实例。
 * @param isSuccessful 是否可以将相机预览输出添加到会话中的结果。返回true表示可以将相机预览输出添加到会话中，返回false表示不可以。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_CanAddPreviewOutput(Camera_CaptureSession* session,
    Camera_PreviewOutput* cameraOutput, bool* isSuccessful);

/**
 * @brief 确定是否可以将拍照输出添加到会话中。
 *
 * @param session Camera_CaptureSession实例。
 * @param cameraOutput 要设置的拍照输出实例。
 * @param isSuccessful 拍照输出是否可以添加到会话中的结果。返回true表示拍照输出可以添加到会话中，返回false表示不可以。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_CanAddPhotoOutput(Camera_CaptureSession* session,
    Camera_PhotoOutput* cameraOutput, bool* isSuccessful);

/**
 * @brief 确定是否可以将录像输出添加到会话中。
 *
 * @param session Camera_CaptureSession实例。
 * @param cameraOutput 要添加的录像输出实例。
 * @param isSuccessful 录像输出是否可以添加到会话中的结果。返回true表示录像输出可以添加到会话中，返回false表示不可以。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_CanAddVideoOutput(Camera_CaptureSession* session,
    Camera_VideoOutput* cameraOutput, bool* isSuccessful);

/**
 * @brief 检查是否支持指定的预配置类型。
 *
 * @param session Camera_CaptureSession实例。
 * @param preconfigType 要检查的预配置类型。
 * @param canPreconfig 是否支持预配置的结果。返回true表示支持预配置，返回false表示不支持。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_CanPreconfig(Camera_CaptureSession* session,
    Camera_PreconfigType preconfigType, bool* canPreconfig);

/**
 * @brief 检查是否支持带比例的预配置类型。
 *
 * @param session Camera_CaptureSession实例。
 * @param preconfigType 要检查的预配置类型。
 * @param preconfigRatio 要检查的预配置比例。
 * @param canPreconfig 是否支持预配置的结果。返回true表示支持预配置，返回false表示不支持。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_CanPreconfigWithRatio(Camera_CaptureSession* session,
    Camera_PreconfigType preconfigType, Camera_PreconfigRatio preconfigRatio, bool* canPreconfig);

/**
 * @brief 设置预配置类型。
 *
 * @param session Camera_CaptureSession实例。
 * @param preconfigType 指定的预配置类型。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SERVICE_FATAL_ERROR：相机服务出现致命错误。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_Preconfig(Camera_CaptureSession* session,
    Camera_PreconfigType preconfigType);

/**
 * @brief 设置带有比例的预配置类型。
 *
 * @param session Camera_CaptureSession实例。
 * @param preconfigType 指定的预配置类型。
 * @param preconfigRatio 指定的预配置比例。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SERVICE_FATAL_ERROR：相机服务出现致命错误。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_PreconfigWithRatio(Camera_CaptureSession* session,
    Camera_PreconfigType preconfigType, Camera_PreconfigRatio preconfigRatio);

/**
 * @brief 查询曝光值。
 *
 * @param session Camera_CaptureSession实例。
 * @param exposureValue 当前的曝光值。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SERVICE_FATAL_ERROR：相机服务出现致命错误。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_GetExposureValue(Camera_CaptureSession* session, float* exposureValue);

/**
 * @brief 获取当前焦距值。
 *
 * @param session Camera_CaptureSession实例。
 * @param focalLength 当前焦距值。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_GetFocalLength(Camera_CaptureSession* session, float* focalLength);

/**
 * @brief 触发平滑变焦。
 *
 * @param session Camera_CaptureSession实例。
 * @param targetZoom 要设置的目标变焦比。
 * @param smoothZoomMode 平滑变焦模式。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_SetSmoothZoom(Camera_CaptureSession* session,
    float targetZoom, Camera_SmoothZoomMode smoothZoomMode);

/**
 * @brief 获取支持的色彩空间列表。
 *
 * @param session Camera_CaptureSession实例。
 * @param colorSpace 如果方法调用成功，将记录支持的OH_NativeBuffer_ColorSpace列表。
 * @param size 如果方法调用成功，将记录支持的OH_NativeBuffer_ColorSpace列表的大小。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_GetSupportedColorSpaces(Camera_CaptureSession* session,
    OH_NativeBuffer_ColorSpace** colorSpace, uint32_t* size);

/**
 * @brief 删除色彩空间列表。
 *
 * @param session Camera_CaptureSession实例。
 * @param colorSpace 如果方法调用成功，将删除的OH_NativeBuffer_ColorSpace列表。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_DeleteColorSpaces(Camera_CaptureSession* session,
    OH_NativeBuffer_ColorSpace* colorSpace);

/**
 * @brief 获取当前色彩空间。
 *
 * @param session Camera_CaptureSession实例。
 * @param colorSpace 当前的OH_NativeBuffer_ColorSpace。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_GetActiveColorSpace(Camera_CaptureSession* session,
    OH_NativeBuffer_ColorSpace* colorSpace);

/**
 * @brief 设置当前色彩空间。
 *
 * @param session Camera_CaptureSession实例。
 * @param colorSpace 要设置的目标OH_NativeBuffer_ColorSpace。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 12
 */
Camera_ErrorCode OH_CaptureSession_SetActiveColorSpace(Camera_CaptureSession* session,
    OH_NativeBuffer_ColorSpace colorSpace);

/**
 * @brief 注册设备切换事件回调。
 *
 * @param session Camera_CaptureSession实例。
 * @param autoDeviceSwitchStatusChange 要注册的设备切换事件回调。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 13
 */
Camera_ErrorCode OH_CaptureSession_RegisterAutoDeviceSwitchStatusCallback(Camera_CaptureSession* session,
    OH_CaptureSession_OnAutoDeviceSwitchStatusChange autoDeviceSwitchStatusChange);

/**
 * @brief 注销设备切换事件回调。
 *
 * @param session Camera_CaptureSession实例。
 * @param autoDeviceSwitchStatusChange 要注销的设备切换事件回调。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 13
 */
Camera_ErrorCode OH_CaptureSession_UnregisterAutoDeviceSwitchStatusCallback(Camera_CaptureSession* session,
    OH_CaptureSession_OnAutoDeviceSwitchStatusChange autoDeviceSwitchStatusChange);

/**
 * @brief 检查是否支持自动设备切换。
 *
 * @param session Camera_CaptureSession实例。
 * @param isSupported 是否支持自动设备切换的结果。返回true表示支持自动设备切换，返回false表示不支持。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 13
 */
Camera_ErrorCode OH_CaptureSession_IsAutoDeviceSwitchSupported(Camera_CaptureSession* session, bool* isSupported);

/**
 * @brief 是否启用相机设备的自动切换。
 *
 * @param session Camera_CaptureSession实例。
 * @param enabled 是否启用自动切换的标志。返回true表示启用自动切换，返回false表示不启用。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。\n
 *         CAMERA_SERVICE_FATAL_ERROR：相机服务出现致命错误。
 * @since 13
 */
Camera_ErrorCode OH_CaptureSession_EnableAutoDeviceSwitch(Camera_CaptureSession* session, bool enabled);

/**
 * @brief 注册系统压力状态变化回调。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param systemPressureLevelChange 要注册的系统压力状态变化OH_CaptureSession_OnSystemPressureLevelChange回调。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 20
 */
Camera_ErrorCode OH_CaptureSession_RegisterSystemPressureLevelChangeCallback(Camera_CaptureSession* session,
    OH_CaptureSession_OnSystemPressureLevelChange systemPressureLevelChange);

/**
 * @brief 注销系统压力状态变化回调。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param systemPressureLevelChange 要注销的系统压力状态变化OH_CaptureSession_OnSystemPressureLevelChange回调。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 20
 */
Camera_ErrorCode OH_CaptureSession_UnregisterSystemPressureLevelChangeCallback(Camera_CaptureSession* session,
    OH_CaptureSession_OnSystemPressureLevelChange systemPressureLevelChange);

/**
 * @brief 设置录像质量优先级。\n
 * 默认为高质量，设置为功耗平衡将降低录像质量以减少功耗。实际功耗收益因平台而异。
 * 
 * @param session Camera_CaptureSession实例。
 * @param qualityPrioritization 要设置的录像质量优先级，默认为高质量。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 14
 */
Camera_ErrorCode OH_CaptureSession_SetQualityPrioritization(
    Camera_CaptureSession* session, Camera_QualityPrioritization qualityPrioritization);

/**
 * @brief 检查是否支持微距能力。
 *
 * @param session Camera_CaptureSession实例。
 * @param isSupported 是否支持微距能力的结果。返回true表示支持微距能力，返回false表示不支持。
 * @return 
 *         CAMERA_OK = 0：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 19
 */
Camera_ErrorCode OH_CaptureSession_IsMacroSupported(Camera_CaptureSession* session, bool* isSupported);

/**
 * @brief 是否启用相机设备的微距能力。
 *
 * @param session Camera_CaptureSession实例。
 * @param enabled 是否启用微距能力的标志。返回true表示启用微距能力，返回false表示不启用。
 * @return 
 *         CAMERA_OK = 0：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。\n
 *         CAMERA_OPERATION_NOT_ALLOWED：不允许操作。
 * @since 19
 */
Camera_ErrorCode OH_CaptureSession_EnableMacro(Camera_CaptureSession* session, bool enabled);

/**
 * @brief 设置白平衡的色温。\n
 * 设置前，建议通过{@link OH_CaptureSession_GetWhiteBalanceRange}获取支持配置的白平衡色温范围。
 *
 * @param session Camera_CaptureSession实例。
 * @param colorTemperature 色温值，单位为K。
 * @return CAMERA_OK：设置成功。\n
 * CAMERA_INVALID_ARGUMENT：参数缺失或者参数类型不正确。\n
 * CAMERA_SESSION_NOT_CONFIG：相机会话未配置。
 * @since 20
 */
Camera_ErrorCode OH_CaptureSession_SetWhiteBalance(Camera_CaptureSession* session, int32_t colorTemperature);

/**
 * @brief 获取当前白平衡色温值。
 *
 * @param session Camera_CaptureSession实例。
 * @param colorTemperature 色温值，单位为K。
 * @return CAMERA_OK：函数调用成功。\n
 * CAMERA_INVALID_ARGUMENT：参数缺失或者参数类型不正确。\n
 * CAMERA_SESSION_NOT_CONFIG：相机会话未配置。
 * @since 20
 */
Camera_ErrorCode OH_CaptureSession_GetWhiteBalance(Camera_CaptureSession* session, int32_t *colorTemperature);

/**
 * @brief 获取当前的白平衡模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param whiteBalanceMode 白平衡模式。
 * @return CAMERA_OK：函数调用成功。\n
 * CAMERA_INVALID_ARGUMENT：参数缺失或者参数类型不正确。\n
 * CAMERA_SESSION_NOT_CONFIG：相机会话未配置。
 */
Camera_ErrorCode OH_CaptureSession_GetWhiteBalanceMode(Camera_CaptureSession* session, Camera_WhiteBalanceMode* whiteBalanceMode);

/**
 * @brief 检查是否支持指定的白平衡模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param whiteBalanceMode 指定的白平衡模式。
 * @param isSupported 用于返回是否支持指定的白平衡模式，支持返回true，否则返回false。
 * @return CAMERA_OK：函数调用成功。\n
 * CAMERA_INVALID_ARGUMENT：参数缺失或者参数类型不正确。\n
 * CAMERA_SESSION_NOT_CONFIG：相机会话未配置。
 * @since 20
 */
Camera_ErrorCode OH_CaptureSession_IsWhiteBalanceModeSupported(Camera_CaptureSession* session,
    Camera_WhiteBalanceMode whiteBalanceMode, bool* isSupported);

/**
 * @brief 设置白平衡模式。
 *
 * @param session Camera_CaptureSession实例。
 * @param whiteBalanceMode 白平衡模式。
 * @return CAMERA_OK：设置成功。\n
 * CAMERA_INVALID_ARGUMENT：参数缺失或者参数类型不正确。\n
 * CAMERA_SESSION_NOT_CONFIG：相机会话未配置。
 * @since 20
 */
Camera_ErrorCode OH_CaptureSession_SetWhiteBalanceMode(Camera_CaptureSession* session, Camera_WhiteBalanceMode whiteBalanceMode);

/**
 * @brief 获取支持配置的白平衡色温范围。
 *
 * @param session Camera_CaptureSession实例。
 * @param minColorTemperature 支持的最小色温值，单位为K。
 * @param maxColorTemperature 支持的最大色温值，单位为K。
 * @return CAMERA_OK：函数调用成功。\n
 * CAMERA_INVALID_ARGUMENT：参数缺失或者参数类型不正确。\n
 * CAMERA_SESSION_NOT_CONFIG：相机会话未配置。
 * @since 20
 */
Camera_ErrorCode OH_CaptureSession_GetWhiteBalanceRange(Camera_CaptureSession* session, int32_t *minColorTemperature, int32_t *maxColorTemperature);

/**
 * @brief 检查是否支持相机控制器。
 *
 * @param session Camera_CaptureSession实例。
 * @param isSupported 是否支持相机控制器的结果。true表示支持，false表示不支持。
 * @return CAMERA_OK = 0：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 20
 */
Camera_ErrorCode OH_CaptureSession_IsControlCenterSupported(Camera_CaptureSession* session, bool* isSupported);


/**
 * @brief 获取相机控制器支持的效果类型。
 *
 * @param session Camera_CaptureSession实例。
 * @param types 如果方法调用成功，将记录支持的Camera_ControlCenterEffectType列表。
 * @param size 如果方法调用成功，将记录支持的Camera_ControlCenterEffectType列表的大小。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。
 * @since 20
 */
Camera_ErrorCode OH_CaptureSession_GetSupportedEffectType(Camera_CaptureSession* session,
    Camera_ControlCenterEffectType** types, uint32_t* size);

/**
 * @brief 删除相机控制器效果类型列表。
 *
 * @param session Camera_CaptureSession实例。
 * @param types 如果方法调用成功，要删除的Camera_ControlCenterEffectType列表。
 * @param size 要删除的Camera_ControlCenterEffectType列表的大小。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 20
 */
Camera_ErrorCode OH_CaptureSession_DeleteSupportedEffectType(Camera_CaptureSession* session,
    Camera_ControlCenterEffectType* types, uint32_t size);

/**
 * @brief 是否启用相机控制器。
 *
 * @param session Camera_CaptureSession实例。
 * @param enabled 是否启用相机控制器的标志。true表示启用，false表示禁用。
 * @return CAMERA_OK = 0：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。\n
 *         CAMERA_SESSION_NOT_CONFIG：捕获会话未配置。\n
 *         CAMERA_SERVICE_FATAL_ERROR：相机服务出现致命错误。
 * @since 20
 */
Camera_ErrorCode OH_CaptureSession_EnableControlCenter(Camera_CaptureSession* session, bool enabled);

/**
 * @brief 注册相机控制器效果激活状态变化回调。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param controlCenterEffectStatusChange 要注册的相机控制器效果激活状态变化OH_CaptureSession_OnControlCenterEffectStatusChange回调。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 20
 */
Camera_ErrorCode OH_CaptureSession_RegisterControlCenterEffectStatusChangeCallback(Camera_CaptureSession* session,
    OH_CaptureSession_OnControlCenterEffectStatusChange controlCenterEffectStatusChange);

/**
 * @brief 注销相机控制器效果激活状态变化回调。
 *
 * @param session 传递回调的Camera_CaptureSession实例。
 * @param controlCenterEffectStatusChange 要注销的相机控制器效果激活状态变化OH_CaptureSession_OnControlCenterEffectStatusChange回调。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 20
 */
Camera_ErrorCode OH_CaptureSession_UnregisterControlCenterEffectStatusChangeCallback(Camera_CaptureSession* session,
    OH_CaptureSession_OnControlCenterEffectStatusChange controlCenterEffectStatusChange);

/**
 * @brief 相机会话微距状态改变回调。
 *
 * @param session 指向Camera_CaptureSession实例的指针。
 * @param isMacroDetected 是否进入超级微距，true表示进入超级微距，false表示未进入超级微距。
 * @since 20
 */
 typedef void (*OH_CaptureSession_OnMacroStatusChange)(Camera_CaptureSession* session, bool isMacroDetected);

 /**
 * @brief 注册相机会话微距状态改变回调函数。
 *
 * @param session 指向Camera_CaptureSession实例的指针。
 * @param macroStatusChange 微距状态改变回调函数。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 20
 */
 Camera_ErrorCode OH_CaptureSession_RegisterMacroStatusChangeCallback(Camera_CaptureSession* session,
     OH_CaptureSession_OnMacroStatusChange macroStatusChange);

/**
 * @brief 取消注册相机会话微距状态改变回调函数。
 *
 * @param session 指向Camera_CaptureSession实例的指针。
 * @param macroStatusChange 微距状态改变回调函数。
 * @return CAMERA_OK：方法调用成功。\n
 *         CAMERA_INVALID_ARGUMENT：参数丢失或参数类型不正确。
 * @since 20
 */
 Camera_ErrorCode OH_CaptureSession_UnregisterMacroStatusChangeCallback(Camera_CaptureSession* session,
     OH_CaptureSession_OnMacroStatusChange macroStatusChange);

#ifdef __cplusplus
}
#endif

#endif // NATIVE_INCLUDE_CAMERA_CAMERA_SESSION_H
/** @} */